package com.example.demo.service.impl;

import com.example.demo.mapper.XueShengMapper;
import com.example.demo.pojo.KaoQin;
import com.example.demo.mapper.KaoQinMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Service;
import com.example.demo.service.KaoQinService;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

/**
 * 考勤表(KaoQin)表服务实现类
 *
 * @author 小虾米大侠
 * @since 2021-03-28 16:37:33
 * @version 1.0
 */
@Service("kaoQinService")
public class KaoQinServiceImpl implements KaoQinService {
    @Resource
    private KaoQinMapper kaoQinMapper;
    @Resource
    private XueShengMapper xueShengMapper;
    /**
     * 根据模糊条件查询总个数
     *
     * @return 返回查询到的总个数
     */




    @Override
    public Map<String, Object> chaXunBiYeYuJing(String leiXingId1,String leiXingId2,String lciShu,String rciSHu,String llciShu,
                                                 String rrciSHu, String lgeShu,
                                                 String rgeShu) {
        Map<String, Object> map = new HashMap<>();
        // 前端端分离时，前端人员会首先判断code值是否满足200，如果不是200，则提醒用户失败
        map.put("code", 0);
        map.put("msg", "查询成功");
        map.put("data", this.kaoQinMapper.chaXunBiYeYuJing(leiXingId1,leiXingId2, lciShu, rciSHu,llciShu,rrciSHu,lgeShu,rgeShu));
        return map;
    }







	@Override
    public Map<String, Object> chaXunCount(String weiGuiLeiXing,
                                           String xueShengXueHao,
                                           String xingMing,
                                           String lweiGuiShiJian,
                                           String rweiGuiShiJian) {
        Map<String, Object> map = new HashMap<>();
        // 前端端分离时，前端人员会首先判断code值是否满足200，如果不是200，则提醒用户失败
        map.put("code", 200);
        map.put("msg", "查询成功");
        map.put("list", this.kaoQinMapper.chaXunCount(weiGuiLeiXing,
                xueShengXueHao,
                xingMing,
                lweiGuiShiJian,
                rweiGuiShiJian));
        return map;
    }

    /**
     * 查询所有数据
     * @return  返回所有数据
     */
	@Override
    public Map<String, Object> chaXunAll() {
        Map<String, Object> map = new HashMap<>();
        // 前端端分离时，前端人员会首先判断code值是否满足200，如果不是200，则提醒用户失败
        map.put("code", 200);
        map.put("msg", "查询成功");
        map.put("list", this.kaoQinMapper.chaXunAll());
        return map;
    }

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
	@Override
    public Map<String, Object> chaXunById(Integer id) {
        Map<String, Object> map = new HashMap<>();
        // 前端端分离时，前端人员会首先判断code值是否满足200，如果不是200，则提醒用户失败
        map.put("code", 200);
        map.put("msg", "查询成功");
        map.put("obj", this.kaoQinMapper.chaXunById(id));
        return map;
    }

    /**
     * 考勤分页查询
     * @param page 查询起始位置
     * @param weiGuiLeiXing
     * @param xueShengXueHao
     * @param xingMing
     * @param lweiGuiShiJian
     * @param rweiGuiShiJian
     * @return
     */
	@Override
    public Map<String, Object> chaXunFenYe(int page, String weiGuiLeiXing,
                                          String xueShengXueHao,
                                        String xingMing,
                                           String lweiGuiShiJian,
                                         String rweiGuiShiJian) {
    // 获取当前表中的总记录
        int tableCount = this.kaoQinMapper.chaXunCount( weiGuiLeiXing,
                xueShengXueHao,
                xingMing,
                lweiGuiShiJian,
                 rweiGuiShiJian);
        // 总页码计算   (总条数 - 1) / 每页显示条数  + 1
        // (100 - 1) / 10 + 1 = 10        (101 - 1) / 10 + 1 = 11      (99 - 1) / 10 + 1 = 10
        int pageCount = (tableCount - 1) / 10 + 1;
        // 计算每页开始的下标值
        int xiaBiao = (page - 1) * 10;
        Map<String, Object> map = new HashMap<>();
        map.put("code", 0);   // 前端端分离时，前端人员会首先判断code值是否满足200，如果不是200，则提醒用户失败
        map.put("msg", "查询成功");
        map.put("pageCount", pageCount);  // 查询的记录总页码
        map.put("count", tableCount);     // 当前表中的总条数
        map.put("data", this.kaoQinMapper.chaXunFenYe(xiaBiao, weiGuiLeiXing,xueShengXueHao,
                xingMing,
                lweiGuiShiJian,
                rweiGuiShiJian));
        return map;
    }

    /**
     * 新增数据
     *
     * @param kaoQin 实例对象
     * @return 实例对象
     */
	@Override
    public Map<String, Object> xinZeng(KaoQin kaoQin) {
        Map<String, Object> map = new HashMap<>();
        // UUID.randomUUID()  返回内容：asd21321-ewrewrew213213-123213zsad-123asdasd这样的形态

        if( xueShengMapper.chaXunFenYe(0,null,kaoQin.getXueShengXueHao().toString()).size()==0){
            map.put("code",150);
            map.put("msg","没有此学生，考勤记录添加无效");
            return map;
        }else {
            this.kaoQinMapper.xinZeng(kaoQin);
            map.put("code", 200);   // 前端端分离时，前端人员会首先判断code值是否满足200，如果不是200，则提醒用户失败
            map.put("msg", "新增成功");
            return map;
        }
    }

    /**
     * 通过ID查询单条数据
     *
     * @param kaoQin 实例对象
     * @return 实例对象
     */
	@Override
    public Map<String, Object> gengXinById(KaoQin kaoQin) {
        this.kaoQinMapper.gengXinById(kaoQin);
        Map<String, Object> map = new HashMap<>();
        map.put("code", 200);   // 前端端分离时，前端人员会首先判断code值是否满足200，如果不是200，则提醒用户失败
        map.put("msg", "更新成功");
        return map;
    }

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
	@Override
    public Map<String,Object> shanChuById(String id) {
        System.out.println(id);
        String[] S1 =id.split(",");
        int[] S3=new int[S1.length];
        for (int i =0;i<S1.length;i++){
            int S2 =Integer.parseInt(S1[i]);
            S3[i]=S2;
        }
        System.out.println(Arrays.toString(S3));
        kaoQinMapper.shanChuById(S3);
        Map<String,Object> map = new HashMap<>();
        map.put("code",200);
        map.put("msg","删除列表成功");
        return map;
    }
}